home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 4 / Light ROM 4 - Disc 1.iso / text / net_news / 1994 / 1.doc / 000048_mohrt@cse.unl.edu_Wed Nov 16 08:07:13 PST 1994.msg < prev    next >
Text File  |  1995-03-23  |  4KB  |  156 lines

  1. Article: 50 of comp.graphics.packages.lightwave
  2. Xref: netcom.com comp.graphics.packages.lightwave:50
  3. Path: netcom.com!ix.netcom.com!howland.reston.ans.net!vixen.cso.uiuc.edu!newsfeed.ksu.ksu.edu!moe.ksu.ksu.edu!crcnis1.unl.edu!cse!mohrt
  4. From: mohrt@cse.unl.edu (Monte Ohrt)
  5. Newsgroups: comp.graphics.packages.lightwave
  6. Subject: Bezier Curve Macro
  7. Date: 16 Nov 1994 01:32:33 GMT
  8. Organization: University of Nebraska--Lincoln    
  9. Lines: 141
  10. Distribution: world
  11. Message-ID: <3abnfh$28t@crcnis1.unl.edu>
  12. NNTP-Posting-Host: cse.unl.edu
  13.  
  14.     I uploaded a new Macro for Lightwave Modeler that creates a
  15. Bezier Curve from control points that you create.  It is called
  16. "bezier.lwm" and it is on the tomahawk ftp site in /incoming/arexx
  17.  
  18. For those of you who do not have ftp access, I've included the 
  19. script here, since it is quite short anyway.
  20.  
  21. -snip-
  22.  
  23.  
  24. /* Bezier curve creator
  25.  * Use selected control points to create a bezier curve.
  26.  * By Monte Ohrt�� 1994 The Rendering Plant Inc. */
  27.  
  28.  
  29. Version = 1.0
  30. address "LWModelerARexx.port"
  31. libadd = addlib("LWModelerARexx.port",0)
  32. MATHLIB="rexxmathlib.library"
  33. IF POS(MATHLIB , SHOW('L')) = 0 THEN
  34.   IF ~ADDLIB(MATHLIB , 0 , -30 , 0) THEN DO
  35.      call notify(1,"!Can't find "MATHLIB)
  36.         exit
  37.         END
  38.  
  39. sysnam = 'Bezier Curves'
  40. signal on error
  41. signal on syntax
  42.  
  43. call sel_mode(USER)
  44. call req_begin sysnam
  45.  
  46. id_txt = req_addcontrol("Create Bezier",'T',"Curves")
  47. id_txt2 = req_addcontrol("By Monte Ohrt",'T',"")
  48. id_seg = req_addcontrol("Number of Points to make",'n')
  49. id_cur = req_addcontrol("Make a Curve?",'B')
  50. id_cntl = req_addcontrol("Keep original control points?",'B')
  51. call req_setval id_seg, 15
  52. call req_setval id_cur, 1
  53. call req_setval id_cntl, 0
  54. if (~req_post()) then do
  55.     call req_end
  56.     exit
  57. end
  58. curve = ""
  59. segs = req_getval(id_seg)
  60. cur = req_getval(id_cur)
  61. cntl = req_getval(id_cntl)
  62. call req_end()
  63. n = xfrm_begin()
  64. if n=0 then do
  65.   call notify(1,"no points selected!")
  66.   exit
  67.   end
  68. say n
  69. do i = 1 to n
  70.   Point.i= xfrm_getpos(i)
  71.   say Point.i
  72.   end
  73. call xfrm_end()
  74. if (~cntl) then do
  75.    call CUT()
  76.    end
  77. delta = 1.0/segs
  78. parse value point.1 with x y z
  79.  
  80.  
  81. call ADD_BEGIN()
  82.  
  83. curve = curve add_point(x y z)
  84.  
  85. call meter_begin (segs-1), "Creating Bezier Curve"
  86. do i = 1 to (segs-1)
  87.    t=i*delta 
  88.    temp2=1
  89.    do z=1 to (n-1)
  90.    temp2=temp2*(1-t)
  91.    end
  92.    temp3=1
  93.    parse value point.1 with x y z .
  94.    sum=temp2*x
  95.    sum2=temp2*y
  96.    sum3=temp2*z
  97.    do k = 1 to (n-1)
  98.       temp2=temp2*(n-k)*t
  99.       temp3=temp3*k*(1-t)
  100.       temp=temp2/temp3
  101.       j=k+1
  102.       parse value point.j with x y z .
  103.       sum=sum+temp*x
  104.       sum2=sum2+temp*y
  105.       sum3=sum3+temp*z
  106.    end
  107.   curve = curve add_point(sum sum2 sum3) 
  108.   call meter_step
  109. end
  110.  
  111. parse value point.n with x y z
  112.  
  113. curve = curve add_point(x y z)
  114.  
  115. call meter_end
  116.  
  117. if (cur) then do
  118.    call ADD_CURVE curve
  119.    end
  120. call ADD_END
  121.  
  122. if (libadd) then call remlib("LWModelerARexx.port")
  123. exit
  124.  
  125.  
  126.  
  127.  
  128. syntax:
  129. error:
  130.   call end_all
  131.    t=Notify(1,'!Rexx Script Error','@'ErrorText(rc),'Line 'SIGL)
  132.    exit
  133.  
  134. PointCount: PROCEDURE
  135.   n=XFRM_BEGIN()
  136.   call END_ALL()
  137.   return n
  138.  
  139.  
  140.  
  141.  
  142.  
  143. -snip-
  144.  
  145. enjoy.
  146.  
  147. Monte
  148.  
  149.  
  150. --
  151. -------------------     A1200  Seagate 235M        99 bugs in the code, 99  
  152. mohrt@cse.unl.edu       M1230XA/50/50/16 @60ns     bugs, fix one bug, compile  
  153. Animator/Modeler        PAR equipped Toaster 4000  it again, 101 bugs in the
  154. The Rendering Plant     (402) 477-4338             code..... 
  155.  
  156.